PM_FUNC_NORM_ATTRIB SKILL:SkillAuroraBeam( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Aurora Beam", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 20, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages, may Freeze enemy and/or decrease its Attack." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillBlizzard( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Blizzard", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 5, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may Freeze enemy." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillHaze( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Haze", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 30, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Cures all Status effects on both Pokemon." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillIceBeam( SKILL_CALL:iCall, Int:id )
{
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Ice Beam", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 10, .Charges = 10, .DelayTime = 10.0 );
		case CALL_HELP:     return SkillHelp( "Damages and Freezes enemies." );
		case CALL_BIND_DOWN:
		{
			new Coord:cOrigin[3], Coord:cAim[3];
			get_user_origin( id, cOrigin );
			PlayerAimOrigin( id, cAim );

			new Float:fRadius = StatClamp( id, STAT_SPECIAL, 50.0, 150.0 );
			new Int:iMaxDamage = StatClamp( id, STAT_SPECIAL, 5, 10 );

			SkillLineDamage( .attacker = id,
							.cStart = cOrigin,
							.cEnd = cAim,
							.fRadius = fRadius,
							.iMaxDamage = iMaxDamage,
							.flags = AOE_IGNORE_ATTACKER | AOE_VICTIM_TEAM
						);

			EffectBeamEntPoint( .iPlayer = 0,
							.iStartEnt = id,
							.cEnd = cAim,
							.iSprite = SPRITE_ZBEAM6,
							.iStartFrame = 0,
							.iFrameRate = 10,
							.fLife = 0.1,
							.iLineWidth = floatround( fRadius ),
							.iNoiseAmp = 0,
							.iRed = 255,
							.iGreen = 255,
							.iBlue = 255,
							.iAlpha = 255,
							.iScrollSpeed = 10
						);

			StatusLine( .iInflictorID = id,
						.vStart = CoordToVector( cOrigin ),
						.vEnd = CoordToVector( cAim ),
						.iStatus = STATUS_FROZEN,
						.fRadius = fRadius,
						.iAmount = 2
						);

			SoundCast( id );

			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillIcePunch( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Ice Punch", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 15, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Damages and may Freeze enemy." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

PM_FUNC_NORM_ATTRIB SKILL:SkillMist( SKILL_CALL:iCall, Int:id )
{
	#pragma unused id
	switch( iCall )
	{
		case CALL_REGISTER: return SkillRegister( .Name = "Mist", .Type = TYPE_ICE, .callTypes = CALL_BIND_DOWN, .PP = 30, .Charges = 1, .DelayTime = 1.0 );
		case CALL_HELP:     return SkillHelp( "Immune to stat decreasing Attacks." );
		case CALL_BIND_DOWN:
		{
			return SKILL_USED;
		}
	}
	return SKILL_READY;
}

